package until

import (
	"fmt"
	"io"
	"os"
	"strconv"
	"strings"

	"github.com/bitly/go-simplejson"
)

// 查找一个字符串在另一个字符串中的位置，若找不到则返回-1，找到了，返回末尾的位置
func FindTagIndex(line, tag string) int {
	// 查找tag在line中的位置
	index := strings.Index(line, tag)
	if index == -1 {
		// 没找到
		return -1
	}
	// 找到了，返回末尾的位置
	return index + len(tag)
}

// 字符转16进制 "68 0d"->0x680d
func StringToHex(str string) []byte {
	// 去掉空格
	str = strings.Replace(str, " ", "", -1)
	// 去掉换行符
	str = strings.Replace(str, "\n", "", -1)
	// 去掉字符串中的空格
	hexString := strings.ReplaceAll(str, " ", "")

	// 转换为16进制
	// hex, err := strconv.ParseUint
	lens := len(hexString) / 2
	bytes := make([]byte, lens)
	for i := 0; i < lens; i++ {
		// 16进制转换
		a, _ := strconv.ParseUint(hexString[i*2:i*2+2], 16, 8)
		bytes[i] = byte(a)
	}
	return bytes
}

// int转16进制,16397->0x400D
func IntToHex(i int) string {
	return fmt.Sprintf("%X", i)
}

// 读取文件,返回json格式的数据
func ReadFileAndReturnJSON(filename string) (*simplejson.Json, error) {
	// 打开文件
	file, err := os.Open(filename)
	if err != nil {
		return nil, fmt.Errorf("无法打开文件: %v", err)
	}
	defer file.Close()

	// 读取文件内容
	data, err := io.ReadAll(file)
	if err != nil {
		return nil, fmt.Errorf("无法读取文件内容: %v", err)
	}

	// 解析JSON数据
	js, err := simplejson.NewJson(data)
	if err != nil {
		return nil, fmt.Errorf("解析JSON数据失败: %v", err)
	}

	return js, nil
}

// 创建一个文件，向文件中尾部追加内容
func AppendToFile(filename, content string) {
	// 打开文件
	file, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()

	// 写入内容
	_, err = file.WriteString(content)
	if err != nil {
		fmt.Println(err)
		return
	}
}

// 比较一个十六进制数的str是否在start和end之间
func CompareHexStr(str, start, end string) bool {
	// 转换为int
	strInt, _ := strconv.ParseInt(str, 16, 64)
	startInt, _ := strconv.ParseInt(start, 16, 64)
	endInt, _ := strconv.ParseInt(end, 16, 64)
	// 比较
	if strInt >= startInt && strInt <= endInt {
		return true
	}
	return false
}
